//package com.dem.javatestwebsocket.chathandler;
//
//import cn.hutool.json.JSONUtil;
//import com.dem.javatestwebsocket.mapper.ChatHistoryMapper;
//import com.dem.javatestwebsocket.model.ChatHistory;
//import com.dem.javatestwebsocket.service.impl.MessageRankService;
//import com.dem.javatestwebsocket.service.impl.OnlineUserService;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import org.springframework.stereotype.Component;
//
//
//import javax.websocket.*;
//import javax.websocket.server.ServerEndpoint;
//import java.io.IOException;
//import java.util.Date;
//import java.util.Set;
//
//@ServerEndpoint("/chat")
//    @Component
//    public class ChatEndpoint {
//
//    private static ChatHistoryMapper chatHistoryMapper;
//     @Autowired
//    public void setChatHistoryMapper(ChatHistoryMapper chatHistoryMapper) {
//        ChatEndpoint.chatHistoryMapper = chatHistoryMapper;
//    }
//
//        private static OnlineUserService onlineUserService;
//        private static MessageRankService messageRankService;
//        private static MessageBroadcaster broadcaster;
//        @Autowired
//        public void setServices(OnlineUserService ous,
//                                MessageRankService mrs,
//                                MessageBroadcaster mb) {
//            onlineUserService = ous;
//            messageRankService = mrs;
//            broadcaster = mb;
//        }
//    @OnOpen
//    public void onOpen(Session session) {
//        System.out.println("连接建立: " + session.getId());
//        String userId = extractUserId(session);
//        onlineUserService.userLogin(userId);
//        sendOnlineUsersUpdate();
//    }
//
//    private String extractUserId(Session session) {
//            if (session == null || session.getRequestURI() == null) {
//                return null;
//            }
//            String query = session.getRequestURI().getQuery();
//            if (query == null || !query.contains("=")) {
//                return null;
//            }
//            String[] pairs = query.split("&");
//            for (String pair : pairs) {
//                String[] keyValue = pair.split("=");
//                if (keyValue.length == 2 && "userId".equals(keyValue[0])) {
//                    return keyValue[1];
//                }
//            }
//            return null;
//
//    }
//
//    private void sendOnlineUsersUpdate() {
//            Set<String> users = onlineUserService.getOnlineUsers();
//            broadcaster.broadcast("ONLINE_USERS:" + String.join(",", users));
//        }
//
//        @OnMessage
//    public void onMessage(String message, Session session) throws IOException {  //会捕获异常并打印堆栈信息，
//                ChatHistory chatHistory = JSONUtil.toBean(message, ChatHistory.class);
//                chatHistory.setTime(new Date());
//                // 持久化消息到数据库
//                String userId = extractUserId(session);
//                chatHistoryMapper.insert(chatHistory);
//                // 更新消息排行榜
//                messageRankService.incrementMessageCount(userId);
//
//                // 通过Redis广播消息
//                broadcaster.broadcast(message);
//
//                // 广播消息给所有客户端
////            for (Session s : session.getOpenSessions()) {   //获取当前服务器上所有打开的WebSocket会话。
////                if (s != null && s.isOpen()) { // 检查会话是否有效
////                    s.getBasicRemote().sendText(message);
////                }
////            }
////        } catch (IOException e) {
////            // 处理发送消息时的异常
////            e.printStackTrace();
////            // 向客户端发送错误信息
////            session.getBasicRemote().sendText("Error: Message could not be sent to all clients.");
////        } catch (Exception e) {
////            // 处理其他类型的异常
////            e.printStackTrace();
////            // 向客户端发送错误信息
////            session.getBasicRemote().sendText("Error: An unexpected error occurred.");
//
//        }
//    @OnClose
//    public void onClose(Session session) {
//        String userId = extractUserId(session);
//        onlineUserService.userLogout(userId);
//        sendOnlineUsersUpdate();
//        System.out.println("连接关闭: " + session.getId());
//    }
//
//  @OnError
//    public void onError(Session session, Throwable throwable) {
//        System.out.println("发生错误: " + session.getId());
//        throwable.printStackTrace();
//    }
//}